(* File lexer2.mll *)

{
open Parser2        (* The type token is defined in parser2.mli *)
}

rule token = parse
	[' ' '\t' '\n']			{ token lexbuf }     (* skip blanks *)
	| "/*" _* "*/"          { token lexbuf }     (* skip comments *)
	| "never"					{ token lexbuf }     (* skip prolog *)
	| '{'							{ token lexbuf }
	| '}'							{ token lexbuf }

	| "skip"                { TokenSkip }
	| "true"                { TokenTrue }
 	| "false"                { TokenFalse }
 	| '1'                   { TokenTrue }
	| ':'							{ TokenColon }
	| "if"						{ TokenIf }
	| "fi;"						{ TokenFi }
	| "->"						{ TokenTo }
	| "goto"                { TokenGoto }
	| '!'                   { TokenNot }
	| "&&"                  { TokenAnd }
	| "||"                  { TokenOr }
	| '('                   { TokenLBr }
	| ')'                   { TokenRBr }
	| ['a'-'z' 'A'-'Z' '_']+ ['a'-'z' 'A'-'Z' '_' '0'-'9']*    { TokenStr(Lexing.lexeme lexbuf) }
	| eof            			{ TokenEof }

	| _							{ token lexbuf }     (* skip rest *)